# 读取提示词
import asyncio
import json
from langchain_mcp_adapters.client import MultiServerMCPClient
from langgraph.prebuilt import create_react_agent
from src.agent.my_llm import llm

# with open("./agent_prompts.txt", "r", encoding="utf-8") as f:
#     prompt = f.read()


# 环境配置
# 读取servers_config.json中的MCP服务器信息
# def get_servers_config():
#     with open("servers_config.json", "r", encoding="utf-8") as f:
#         return json.load(f).get("mcpServers", {})


# servers_config = get_servers_config()

servers_config = {
    "weather": {
        "command": "python",
        "args": [
            "weather_server.py"
        ],
        "transport": "stdio"
    },
    "write": {
        "command": "python",
        "args": [
            "write_server.py"
        ],
        "transport": "stdio"
    }
}

# 连接多台MCP服务器
mcp_client = MultiServerMCPClient(servers_config)


# 获取tools，可以用作LangGraph Tools列表
async def get_tools():
    return await mcp_client.get_tools()


# 工具和代理需要在异步环境中初始化
tools = asyncio.run(get_tools())
print(f"tools: {tools}")
# 构建agent
graph = create_react_agent(model=llm, tools=tools, prompt="""
你是一个智能体，具备一下两种能力：
1、查询天气：调用query_weather(city: str)，返回指定城市的实时天气
2、写入文件：调用write_file(content: str)，将文本内容写入本地文件并返回路径

当用户提出请求时，你需要理解意图并选择相应的工具。如果用户请求缺少必要信息，先与用户确认后再调用工具。返回结果时以简洁、友好的方式回复。

如果用户提出的问题与你的功能无关，请礼貌地告知无法处理。
""")
# res = await agent.ainvoke(
#     {"messages": [{"role": "user", "content": "请帮我写入一个文件，内容是：测试一下写入文件。"}]})
# print("==========================================\n")
# print(res)


# graph = main()
# print(graph)

# graph = asyncio.run(main())

# 在文件末尾添加
# if __name__ == "__main__":
#     graph = asyncio.run(main())
